from django.http import JsonResponse, HttpResponseRedirect
from django.shortcuts import render, HttpResponse, redirect
from django.contrib.auth.decorators import login_required  # 设置只有登录 才可以操作 函数 使用的模块
from django.contrib import auth
from django.views import View

# Create your views here.


def index(request):
    return render(request, 'index.html')

@login_required     # 设置只有登陆才可以 调用views中的 此方法
def console1(request):
    return render(request, 'console/console1.html')  # 控制首页 出来的配置

# 登录模块  使用的类 方法
class login(View):
    def post(self, request):
        username = request.POST.get("data[username]")
        password = request.POST.get("data[password]")
        captcha = request.POST.get("data[captcha]")
        # print(username,password,captcha)
        # print(request.session.get('code').upper())

        # 从session获取的
        # 1 先校验验证码是否正确      自己决定是否忽略            统一转大写或者小写再比较
        #  因为我上面验证码存放的是code ，所以这边要这样获取
        if request.session.get('code').upper() == captcha.upper():
            # 2 校验用户名和密码是否正确
            captcha_status = 1  # 验证码验证成功
            user_obj = auth.authenticate(request, username=username, password=password)
            if user_obj:
                login_status = 1  # 用户名密码验证成功
            else:
                login_status = 2  # 好像 0 在传值过程会出现问题
        else:
            captcha_status = 0

        if all((login_status == 1, captcha_status == 1)):
            auth.login(request, user_obj)



        login_result = {'login_status': login_status, "captcha_status": captcha_status}
        return HttpResponse(JsonResponse(login_result), content_type='application/json')

    def get(self, request):
        return render(request, "login.html")





@login_required
def loginout(request):  # 退出登录
    auth.logout(request)
    return redirect('/login/')

# 验证码
"""
图片相关的模块
    pip3 install pillow
"""
from PIL import Image, ImageDraw, ImageFont

"""
Image:生成图片
ImageDraw:能够在图片上乱涂乱画
ImageFont:控制字体样式
"""
from io import BytesIO, StringIO

"""
内存管理器模块
BytesIO:临时帮你存储数据 返回的时候数据是二进制
StringIO:临时帮你存储数据 返回的时候数据是字符串
"""
import random  # 随机数使用的模块

def get_random():  # 获得三个 0，255 之间的 随机数
    return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)

def get_code(request):
    # 最终步骤4:写图片验证码
    img_obj = Image.new('RGB', (300, 35), get_random())  # (430, 35)  前端设置的 尺寸
    img_draw = ImageDraw.Draw(img_obj)  # 产生一个画笔对象
    img_font = ImageFont.truetype('static/font/20220707.ttf', 30)  # 字体样式 大小  # 如果在 centos 上运行项目，记得修改这个 路径地址

    # 随机验证码  五位数的随机验证码  数字 小写字母 大写字母
    code = ''
    for i in range(5):
        random_upper = chr(random.randint(65, 90))  # chr  通过数字 转 ASCII  字符
        random_lower = chr(random.randint(97, 122))
        random_int = str(random.randint(0, 9))
        # 从上面三个里面随机选择一个
        tmp = random.choice([random_lower, random_upper, random_int])
        # 将产生的随机字符串写入到图片上
        """
        为什么一个个写而不是生成好了之后再写
        因为一个个写能够控制每个字体的间隙 而生成好之后再写的话
        间隙就没法控制了
        """
        img_draw.text((i * 40 + 40, 0), tmp, get_random(),
                      img_font)
        # (i*60+60,0)  这个括号里的值是可以调整的，第一个好像时 字体的间隙，第二个时 字体距离图片下边框的反向距离
        # 拼接随机字符串
        code += tmp
    # print(code)
    # 随机验证码在登陆的视图函数里面需要用到 要比对 所以要找地方存起来并且其他视图函数也能拿到，因此用到session
    request.session['code'] = code
    io_obj = BytesIO()
    img_obj.save(io_obj, 'png')
    return HttpResponse(io_obj.getvalue())

@login_required
def userinfo(request):
    return render(request, 'userinfo.html')

@login_required
def adduser(request):
    return render(request, 'adduser.html')

@login_required
def addFile(request):
    return render(request, 'addFile.html')

@login_required
def updatesuser(request):
    return render(request, 'updatesuser.html')

@login_required
def personal(request):
    return render(request, 'personal.html')


# 日常操作
@login_required     # 设置只有登陆才可以 调用views中的 此方法
def switch(request):
    return render(request, 'base/switch.html')  # 控制首页 出来的配置
@login_required     # 设置只有登陆才可以 调用views中的 此方法
def swj(request):
    return render(request, 'base/swj.html')  # 控制首页 出来的配置
@login_required     # 设置只有登陆才可以 调用views中的 此方法
def zcd(request):
    return render(request, 'base/zcd.html')  # 控制首页 出来的配置


###  定时任务
@login_required
def dsrwinfo(request):
    return render(request, 'base/dsrwinfo.html')

@login_required
def dsrwresult(request):
    return render(request, 'base/dsrwresult.html')

@login_required
def dsrwswitch(request):
    return render(request, 'base/dsrwswitch.html')

@login_required
def updatesdsrwjh(request):
    return render(request, 'base/updatesdsrwjh.html')

@login_required
def noxrname(request):
    return render(request, 'base/noxrname.html')

@login_required
def upnoxrname(request):
    return render(request, 'base/upnoxrname.html')

@login_required
def xrjdaction(request):
    return render(request, 'base/xrjdaction.html')


# webssh
@login_required
def allhosts(request):
    return render(request, 'webssh/allHosts.html')
@login_required
def addhost(request):
    return render(request, 'webssh/addhost.html')
@login_required
def updatehost(request):
    return render(request, 'webssh/updatehost.html')


@login_required
def remoteuser(request):
    return render(request, 'webssh/remoteuser.html')

@login_required
def updateremoteuser(request):
    return render(request, 'webssh/updateremoteuser.html')
@login_required
def addremoteuser(request):
    return render(request, 'webssh/addremoteuser.html')

@login_required
def webssh2(request):
    return render(request, 'webssh/webssh2.html')

@login_required
def websshlog(request):
    return render(request, 'webssh/websshlog.html')


@login_required
def luxiang(request):
    return render(request, 'webssh/luxiang.html')
@login_required
def lx(request):
    return render(request, 'webssh/lx.html')




@login_required
def xrtbhtml(request):
    return render(request, 'base/xrtbhtml.html')


# rsync 测试
# def rsync(request):
#     return render(request, 'rsync/dirs.html')


def rsynchosts(request):
    return render(request, 'rsync/hosts.html')



### 图 测试
def test(request):
    return render(request, 'dashboard/test.html')
def t830(request):
    return render(request, 'dashboard/830.html')

def test1012(request):
    return render(request, 'dashboard/test1012.html')


def test1014(request):
    return render(request, 'dashboard/7.html')

def test6(request):
    return render(request, 'dashboard/6.html')